package org.edu.modules.growth.controller;

import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.google.common.collect.Maps;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.edu.common.api.vo.Result;
import org.edu.common.system.base.controller.BaseController;
import org.edu.modules.growth.dto.VeJsczExamStageDTO;
import org.edu.modules.growth.entity.VeJsczExamProject;
import org.edu.modules.growth.entity.VeJsczExamStage;
import org.edu.modules.growth.service.IVeJsczExamProjectService;
import org.edu.modules.growth.service.IVeJsczExamStageService;
import org.edu.modules.growth.vo.QueryCondition;
import org.edu.modules.growth.vo.VeJsczExamStageVo;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Api(tags="教职工评价管理--发起评教管理")
@RestController
@RequestMapping("jsczExamStage")
@Slf4j
@AllArgsConstructor
public class VeJsczExamStageController extends BaseController<VeJsczExamStage,IVeJsczExamStageService> {

    private IVeJsczExamStageService mIVeJsczExamStageService;

    private IVeJsczExamProjectService mIVeJsczExamProjectService;

    /**
     * 分页查询信息
     */
    @ApiOperation(value = "分页查询信息")
    @PostMapping("/selectPage")
    public Result<?> selectPage(@RequestBody QueryCondition queryCondition ) {
        return Result.OK(mIVeJsczExamStageService.selectPage(queryCondition));
    }

    /**
     * 保存与编辑
     */
    @ApiOperation(value = "发起评教（保存）")
    @PostMapping("/addOrUpdate")
    public Result<?> addOrUpdate(@RequestBody VeJsczExamStageDTO veJsczExamStageDTO) {
        List<VeJsczExamProject> pList =
                mIVeJsczExamProjectService.listByIds(veJsczExamStageDTO.getProjectIds()) ;
        if( !CollectionUtils.isEmpty(pList) ){
            Integer score = pList.stream().mapToInt(VeJsczExamProject::getScore).sum() ;
            veJsczExamStageDTO.setScore(veJsczExamStageDTO.getScore() == null ? 100 : veJsczExamStageDTO.getScore()) ;
            if( score.equals(veJsczExamStageDTO.getScore()) ){
                return Result.error("选择的项目总分数必须与设定的总分数相等!") ;
            }
        }else{
            return Result.error("传输参数有误") ;
        }
        // 查询是否已有信息
        Map<String,Object> map = new HashMap<>() ;
        map.put("semId",veJsczExamStageDTO.getSemId()) ;
        map.put("identityId",veJsczExamStageDTO.getIdentityId()) ;
        List<VeJsczExamStage> list = mIVeJsczExamStageService.listByMap(map) ;
        if( !CollectionUtils.isEmpty(list) ){
            return Result.error("该学期评教已经发起！") ;
        }
        mIVeJsczExamStageService.add(veJsczExamStageDTO) ;
        return Result.OK();
    }

    /**
     * 根据id详情
     */
    @ApiOperation(value = "查询详情（根据id）")
    @PostMapping("/getDetail")
    public Result<VeJsczExamStageVo> getDetail(@RequestParam("id") Long id) {
        return Result.OK(mIVeJsczExamStageService.getDetailById(id));
    }

    /**
     * 根据id终止评价（删除）
     */
    @ApiOperation(value = "根据id终止评价（删除）")
    @PostMapping("/removeById")
    public Result<?> removeById(@RequestParam("id") Long id) {
        return Result.OK(mIVeJsczExamStageService.removeById(id));
    }

    @ApiOperation(value = "学生/老师/领导 评教界面，评审项目信息初始化")
    @PostMapping("/curProjectByType")
    @ApiImplicitParams ({
        @ApiImplicitParam(paramType = "query", name = "type", value = "参评身份 1-学生 2-教师 -3-领导", dataType = "String"),
        @ApiImplicitParam(paramType = "query", name = "semId", value = "当前学期id", dataType = "String")
    })
    public Result<?> curProjectByType(@RequestParam("type")Integer type,
                                      @RequestParam("semId")Long semId) {
        Map<String,Object> map = Maps.newHashMap() ;
        map.put("identityId",type);
        map.put("semId",semId);
        List<VeJsczExamStage> list = mIVeJsczExamStageService.listByMap(map) ;
        if( !CollectionUtils.isEmpty(list)){
            VeJsczExamStage stage = list.get(0) ;
            Long time = System.currentTimeMillis()/1000 ;
            if( time < stage.getStartTime() ){
                return Result.error("评教未开始！") ;
            }else if( time > stage.getEndTime() ){
                return Result.error("评教已结束！") ;
            }else{
                return Result.OK(mIVeJsczExamStageService.getDetailByStage(list.get(0))) ;
            }
        }
        return Result.error("当前学期,评教还未发起！") ;
    }

}
